home *** CD-ROM | disk | FTP | other *** search
/ Popular Request / By Popular Request (Arsenal Computer)(SysOptics Distribution System).ISO / amiga4 / vidprint.lha / VidPrint / src / ppm2prt.c < prev    next >
C/C++ Source or Header  |  1993-12-07  |  5KB  |  209 lines

  1. /* ppm2prt
  2.  * This program converts a ppm-file to a file that can be fed
  3.  * into a Mitsubishi Videoprinter
  4.  *
  5.  * Source-code and executable are ⌐'93 by
  6.  *           Stephan Feinen
  7.  *           Im Steinfeld 1
  8.  *           52076 Aachen
  9.  *           Germany
  10.  *
  11.  * Please send comments, criticism and suggestions to:
  12.  *           feinen@pool.informatik.rwth-aachen.de
  13.  *
  14. */
  15.  
  16. #define VERSION "1.3beta"
  17.  
  18. #include <stdio.h>
  19. #include <exec/exec.h>
  20. #include <libraries/dos.h>
  21.  
  22. typedef unsigned char   char_type;
  23. typedef struct FileInfoBlock   FileInfoBlock;
  24. char_type magic_header[] = {"\100\066"};
  25.   APTR    Lock(),Open(),AllocMem(),FreeMem();
  26.   ULONG   Examine();
  27.   UBYTE   para,col[3],pos;
  28.   char    width[5],height[5],dummy,dum[4];
  29.   char    *aktuell,*adr;
  30.   FILE    *source,*dest;
  31.   int     j,z,i;
  32.   ULONG   laenge,length;
  33.   APTR    MyLock;
  34.   FileInfoBlock MyInfo;
  35.   int     nomagic = 0;
  36.   char    version[25]="$VER: 1.4 (05.12.93)";
  37.   char    vers[10]=VERSION;
  38.  
  39. Usage()
  40. {
  41.  fprintf(stderr,"Usage: ppm2prt POSITION/N FILE/A\n");
  42.  fprintf(stderr,"position: 1=top left\n");
  43.  fprintf(stderr,"          2=top right\n");
  44.  fprintf(stderr,"          3=bottom left\n");
  45.  fprintf(stderr,"          4=bottom right\n");
  46. }
  47.  
  48. main( argc, argv )
  49. int argc; char **argv;
  50. {
  51.  fprintf(stderr,"ppm2prt %s ⌐1993 Stephan Feinen\n",vers);
  52.  fprintf(stderr,"transmits a PPM to a Mitsubishi Videoprinter\n");
  53.  if (argc != 3)
  54.    {
  55.     Usage();
  56.     exit(1);
  57.    }
  58.   pos=atoi(argv[1]);
  59.   if (!(dest = fopen("par:","w"))) exit (puts("Printer not accessible!\n"));
  60.   MyLock = Lock(argv[2],ACCESS_READ);
  61.   if(!MyLock) exit(puts("Bad Name"));
  62.   if(!Examine(MyLock,&MyInfo)) exit(puts("File Not Found"));
  63.   laenge = MyInfo.fib_Size;
  64.   UnLock(MyLock);
  65.   printf("DateilΣnge=%d\n",laenge);
  66.   adr = AllocMem(laenge,MEMF_CLEAR);
  67.   if(!adr) exit(puts("Out of Memory"));
  68.   if(!(source = fopen(argv[2],"r"))) exit(printf("can't open %s\n",argv[2]));
  69.  
  70.                 /* Check the magic number */
  71.   fscanf(source,"%s",dum);
  72.   if(strcmp("P6",dum))
  73.     {
  74.      fclose(source);
  75.      FreeMem(adr,laenge);
  76.      exit(fprintf(stderr, "%s: not a ppm-file\n",argv[2]));
  77.     }
  78.   fscanf(source,"%s",width);
  79.   fscanf(source,"%s",height);
  80.   fscanf(source,"%s",dum);
  81.   fclose(source);
  82.   if(!(source = Open(argv[2],MODE_OLDFILE)))
  83.     {
  84.      FreeMem(adr,laenge);
  85.      exit(printf("%s not found\n",argv[2]));
  86.     }
  87.   Read(source,adr,laenge);
  88.   Close(source);
  89.   printf("Breite=%s ",width);
  90.   printf("H÷he=%s\n",height);
  91.  
  92.   col[0]=82;
  93.   col[1]=71;
  94.   col[2]=66;
  95.   length=atoi(width)*atoi(height);
  96.   printf("%d Pixels\n",length);
  97.   switch(pos)
  98.   {
  99.    case 1:
  100.      for(j = 0; j < 3; j++)
  101.        {
  102.         fputc(27,dest);
  103.         fputc(87,dest);
  104.         fputc(col[j],dest);
  105.         fputc(0,dest);
  106.         fputc(0,dest);
  107.         fputc(0,dest);
  108.         fputc(0,dest);
  109.         para=(atoi(width)-1) >> 8;
  110.         fputc(para,dest);
  111.         para=(atoi(width)-1) & 255;
  112.         fputc(para,dest);
  113.         para=(atoi(height)-1) >> 8;
  114.         fputc(para,dest);
  115.         para=(atoi(height)-1) & 255;
  116.         fputc(para,dest);
  117.         for(z = 0; z < length*3 ; z=z+3)
  118.           {
  119.            aktuell=adr+j+z+15;
  120.            fputc(*aktuell,dest);
  121.           }
  122.        }
  123.      break;
  124.    case 2:
  125.      for(j = 0; j < 3; j++)
  126.        {
  127.         fputc(27,dest);
  128.         fputc(87,dest);
  129.         fputc(col[j],dest);
  130.         para=(640-atoi(width)) >> 8;
  131.         fputc(para,dest);
  132.         para=(640-atoi(width)) & 255;
  133.         fputc(para,dest);
  134.         fputc(0,dest);
  135.         fputc(0,dest);
  136.         fputc(2,dest);
  137.         fputc(127,dest);
  138.         para=(atoi(height)-1) >> 8;    
  139.         fputc(para,dest);              
  140.         para=(atoi(height)-1) & 255;   
  141.         fputc(para,dest);
  142.         for(z = 0; z < length*3 ; z=z+3)
  143.           {
  144.            aktuell=adr+j+z+15;
  145.            fputc(*aktuell,dest);
  146.           }
  147.        }
  148.      break;
  149.    case 3:
  150.          for(j = 0; j < 3; j++)
  151.        {
  152.         fputc(27,dest);
  153.         fputc(87,dest);
  154.         fputc(col[j],dest);
  155.         fputc(0,dest);
  156.         fputc(0,dest);
  157.         para=(580-atoi(height)) >> 8; 
  158.         fputc(para,dest);           
  159.         para=(580-atoi(height)) & 255;
  160.         fputc(para,dest);
  161.         para=(atoi(width)-1) >> 8;
  162.         fputc(para,dest);
  163.         para=(atoi(width)-1) & 255;
  164.         fputc(para,dest);
  165.         fputc(2,dest);
  166.         fputc(67,dest);
  167.         for(z = 0; z < length*3 ; z=z+3)
  168.           {
  169.            aktuell=adr+j+z+15;
  170.            fputc(*aktuell,dest);
  171.           }
  172.        }
  173.      break;
  174.    case 4:
  175.      for(j = 0; j < 3; j++)
  176.        {
  177.         fputc(27,dest);
  178.         fputc(87,dest);
  179.         fputc(col[j],dest);
  180.         para=(640-atoi(width)) >> 8;
  181.         fputc(para,dest);
  182.         para=(640-atoi(width)) & 255;
  183.         fputc(para,dest);
  184.         para=(580-atoi(height)) >> 8;
  185.         fputc(para,dest);
  186.         para=(580-atoi(height)) & 255;
  187.         fputc(para,dest);
  188.         fputc(2,dest);
  189.         fputc(127,dest);
  190.         fputc(2,dest);
  191.         fputc(67,dest);
  192.  
  193.         for(z = 0; z < length*3 ; z=z+3)        
  194.           {
  195.            aktuell=adr+j+z+15;
  196.            fputc(*aktuell,dest);
  197.           }
  198.        }
  199.      break;
  200.      default:
  201.      FreeMem(adr,laenge);
  202.      exit(puts("bad pos-number!"));
  203.   }
  204.   printf("%d bytes transfered\n",laenge);
  205.  
  206.   fclose(dest);
  207.   FreeMem(adr,laenge);
  208. }
  209.